Differenziazione automatica

Relazione tra differenziazione automatica e differenziazione simbolica

La differenziazione automatica (in lingua inglese automatic differentiation, AD), nota anche come differenziazione algoritmica o differenziazione computazionale,[1] è un insieme di tecniche per il calcolo automatico delle derivate di una funzione matematica implementata da un programma informatico. La differenziazione automatica sfrutta il fatto che l'implementazione di una funzione, indipendentemente da quanto sia complessa, si riduce all'esecuzione di una serie di operazioni aritmetiche (somma, sottrazione, moltiplicazione, divisione, etc.) e funzioni elementari (esponenziale, funzioni trigonometriche, etc.). Applicando la regola della catena ripetutamente a tali operazioni, la derivata di una funzione arbitrariamente complessa può essere calcolata automaticamente, alla precisione di calcolo in uso, e velocemente, usando un numero di operazioni equivalente al più ad un fattore piccolo e costante rispetto al numero di operazioni usate nella funzione originale.

La differenziazione automatica non deve essere confusa con la differenziazione simbolica, che viene eseguita manipolando le espressioni rappresentate in forma simbolica, né con la differenziazione numerica, che approssima la derivata con una differenza finita. Il primo metodo è solitamente molto più lento e limitato dalla difficoltà di convertire funzioni arbitrarie in forma simbolica, mentre il secondo metodo introduce errori numerici di discretizzazione che tendono a propagarsi e limitano la stabilità numerica. Inoltre, entrambi i metodi sono lenti nel calcolare derivate parziali di funzioni con un numero elevato di variabili, problema comunemente incontrato in metodi di ottimizzazione basati su discesa del gradiente. Tali metodi sono alla base dell'implementazione di molte tecniche di apprendimento automatico, in particolare apprendimento profondo, e la maggior parte dei framework di apprendimento profondo implementano la differenziazione automatica per il calcolo automatico del gradiente.[2][3][4]

  1. ^ Richard D. Neidinger, Introduction to Automatic Differentiation and MATLAB Object-Oriented Programming (PDF), in SIAM Review, vol. 52, n. 3, 2010, pp. 545–563, DOI:10.1137/080743627.
  2. ^ Eager Execution, su tensorflow.org.
  3. ^ Automatic differentiation package - torch.autograd, su pytorch.org.
  4. ^ Derivatives in Theano — Theano 1.0.0 documentation, su deeplearning.net.

Developed by StudentB